<!DOCTYPE html>
<html class="client-nojs skin-theme-clientpref-os citizen-feature-autohide-navigation-clientpref-1 citizen-feature-image-dimming-clientpref-0 citizen-feature-pure-black-clientpref-0 citizen-feature-custom-font-size-clientpref-standard citizen-feature-custom-width-clientpref-standard citizen-feature-performance-mode-clientpref-1 citizen-header-position-left citizen-header-position-mobile-bottom" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Path</title>
<script id="mwoffliner-jsConfigVars">
document.documentElement.classList.replace('client-nojs', 'client-js')
RLCONF = {"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Path","wgTitle":"Path","wgCurRevisionId":3291,"wgRevisionId":0,"wgArticleId":103,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Concepts"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Path","wgRelevantArticleId":103,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"all","wgConfirmEditCaptchaNeededForGenericEdit":false,"wgMFDisplayWikibaseDescriptions":{"search":false,"nearby":false,"watchlist":false,"tagline":false},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"zimRelativeFilePath":"./"}
RLSTATE = {"user.options":"loading","site.styles":"ready","noscript":"ready","skins.citizen.styles":"ready","skins.citizen.codex.styles":"ready","skins.citizen.icons":"ready","ext.PortableInfobox.styles":"ready","ext.cite.styles":"ready","jquery.makeCollapsible.styles":"ready"}
RLPAGEMODULES = ["jquery","mediawiki.base","mediawiki.page.ready","ext.cite.ux-enhancements","jquery.makeCollapsible"]
;(RLQ = window.RLQ || []).push(function () {
mw.config.set(RLCONF)
mw.loader.state(RLSTATE)
mw.loader.load(RLPAGEMODULES)
;(mw.loader.impl || mw.loader.implement)(function () {
return [
'user.options@12s5i',
function ($, jQuery, require, module) {
mw.user.tokens.set({ patrolToken: '+\\', watchToken: '+\\', csrfToken: '+\\' })
},
]
})
})
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://reticulum.miraheze.org/wiki/Path"> <link href="./_mw_/ext.PortableInfobox.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/jquery.makeCollapsible.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.citizen.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.citizen.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.citizen.styles.css" rel="stylesheet" type="text/css"> <script async="" src="./_mw_/startup.js"></script>
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<noscript><link href="./_mw_/noscript.css" rel="stylesheet" type="text/css"/></noscript>
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<script src="./_res_/script.js"></script>
</head>
<body class="mwoffliner-fallback mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Path rootpage-Path skin-citizen action-view skin--responsive">
<div id="content" class="mw-body" role="main">
<a id="top"></a>
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Path</span></h1>
<div id="bodyContent">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><p class="mw-empty-elt"></p><aside class="portable-infobox noexcerpt searchaux pi-background pi-theme-default pi-layout-default"><h2 class="pi-item pi-item-spacing pi-title" data-source="title">Path</h2><div class="pi-item pi-data pi-item-spacing pi-border-color" data-source="source">
<h3 class="pi-data-label pi-secondary-font">Source</h3>
<div class="pi-data-value pi-font"><span class="mirror link"><span class="web"><a rel="nofollow" class="external text" href="https://github.com/markqvist/reticulum/blob/HEAD/RNS/Transport.py">Transport.py</a></span><span class="nomadnet">[nomadnetwork://a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=RNS/Transport.py Transport.py]</span></span></div>
</div><div class="pi-item pi-data pi-item-spacing pi-border-color" data-source="api">
<h3 class="pi-data-label pi-secondary-font">API</h3>
<div class="pi-data-value pi-font"><span class="manual-link" title="Manual:RNS.Transport"><span class="mirror link"><span class="web"><a rel="nofollow" class="external text" href="https://reticulum.network/manual/reference.html#RNS.Transport">RNS.Transport</a></span><span class="nomadnet">[nomadnetwork://a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/reference.md|anchor=RNS.Transport RNS.Transport]</span></span></span></div>
</div></aside>
<p class="mw-empty-elt"></p><p>A <b>path</b> is a <a href="Node" title="Node">node</a>'s local knowledge of the most optimal next hop towards a <a href="Destination" title="Destination">destination</a>.
</p><p>The node learns this passively from the destination's <a href="Packet#Announce_packet" title="Packet">announce packet</a> by recording in its <a class="mw-selflink-fragment" href="#Table">path table</a> which node the <a href="Announce" title="Announce">announce</a> was received from, the <a href="Interface" title="Interface">interface</a> on which it arrived and other information.
</p><p><a href="Transport_node" title="Transport node">Transport nodes</a> will maintain and persist their path tables, participate in network routing and respond to <a class="mw-selflink-fragment" href="#Request">path requests</a>.
</p><p>No single node knows the full sequence of hops to a destination. The full route "emerges" from each node forwarding <a href="Packet" title="Packet">packets</a> one hop closer to the destination, each node knowing only the next hop. There is no global routing table, and paths are dynamically updated as <a href="https://en.wikipedia.org/wiki/Network_topology" class="extiw external" title="wikipedia:Network topology">network topology</a> changes.
</p><p><i><b>Note:</b> In the manual and elsewhere, <b>path</b> can sometimes mean the full route from a source to a destination. On this wiki, <b>path</b> is used only in its technical sense, as it is used in the code, while <b>route</b> denotes a full sequence of hops.</i>
</p>
<div class="mw-heading mw-heading2"><h2 id="Table">Table</h2></div>
<p>A node's <b>path table</b> maps <a href="Destination#Hash" title="Destination">destination hashes</a> to information needed to route packets, learned from the destination's <a href="Packet#Announce_packet" title="Packet">announce packet</a>:<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<ol><li><code>IDX_PT_TIMESTAMP</code>: Timestamp of when the entry was created or last updated</li>
<li><code>IDX_PT_NEXT_HOP</code>: The node the announce was received from (as a destination hash)</li>
<li><code>IDX_PT_HOPS</code>: Number of hops to the destination</li>
<li><code>IDX_PT_EXPIRES</code>: Timestamp of when the entry expires (depends on the <a href="Interface#Modes" title="Interface">interface mode</a> of <code>IDX_PT_RVCD_IF</code>)</li>
<li><code>IDX_PT_RANDBLOBS</code>: List of random blobs of the most recently seen announces for the destination (used to detect replayed announces)</li>
<li><code>IDX_PT_RVCD_IF</code>: The interface the announce was received on</li>
<li><code>IDX_PT_PACKET</code>: Hash of the cached announce packet (used for deduplication)</li></ol>
<p>Entries are replaced when the node learns of a better path, and removed when paths expire or their interface disappears.
</p>
<div class="mw-heading mw-heading2"><h2 id="Request">Request</h2></div>
<dl><dd><span class="boilerplate seealso"><i>See also: <a href="Interface#Path_seeking" title="Interface">Interface#Path seeking</a></i></span></dd></dl>
<p>If a <a href="Node" title="Node">node</a> has no path to a <a href="Destination" title="Destination">destination</a>, it can send out a <b>path request</b> on the network. <a href="Interface#Path_seeking" title="Interface">Path seeking</a> interfaces allow these requests to propagate recursively through the network. Any node that receives the request and has a path to the destination responds by rebroadcasting the cached announce, which eventually reaches the requester node. This also serves to update path tables along the way.
</p><p>The path request is a regular data <a href="Packet" title="Packet">packet</a> broadcast to the special <a href="Destination#Types" title="Destination">plain</a> destination <code>rnstransport.path.request</code>, which all Reticulum nodes listen to.
</p><p>Path requests are rate limited.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p><i><b>Note:</b> Applications should only request paths for destinations they need to communicate with. Applications that send large amounts of unnecessary path requests will get rate limited by transport nodes, negatively affecting the system they are running on.</i>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Announce" title="Announce">Announce</a></li>
<li><a href="Destination" title="Destination">Destination</a></li>
<li><a href="Rnpath" title="Rnpath">rnpath</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="mirror link"><span class="web"><a rel="nofollow" class="external text" href="https://github.com/markqvist/reticulum/blob/HEAD/RNS/Transport.py">GitHub</a></span><span class="nomadnet">[nomadnetwork://a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=RNS/Transport.py Aleph Git]</span></span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><i>Path Request Burst Control</i>, Manual. <span class="exclude-nomadnet"><a rel="nofollow" class="external text" href="https://reticulum.network/manual/interfaces.html#path-request-burst-control">Web</a> / NomadNet: </span><code class="nomadnet address">a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/interfaces.md|anchor=path-request-burst-control</code></span>
</li>
</ol></div>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r3053">
/* start https://reticulum.miraheze.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://reticulum.miraheze.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r3049">
/* start https://reticulum.miraheze.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox{border:1px solid #6a747f}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-subgroup{background-color:#050505}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-list{border-color:#050505}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-abovebelow,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-group,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-image,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-list{border-top:2px solid #050505}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-title{background-color:#00006b}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-abovebelow,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-group,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-subgroup .navbox-title{background-color:#00004d}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-subgroup .navbox-group,html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#00003b}html.skin-theme-clientpref-night:not(.client-darkmode) .mw-parser-output .navbox-even{background-color:#141414}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox{border:1px solid #6a747f}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-subgroup{background-color:#050505}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-list{border-color:#050505}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-abovebelow,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-group,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-image,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output tr+tr>.navbox-list{border-top:2px solid #050505}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-title{background-color:#00006b}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-abovebelow,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-group,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-subgroup .navbox-title{background-color:#00004d}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-subgroup .navbox-group,html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#00003b}html.skin-theme-clientpref-os:not(.client-darkmode) .mw-parser-output .navbox-even{background-color:#141414}}
/* end https://reticulum.miraheze.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Reticulum_concepts" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r3051">
/* start https://reticulum.miraheze.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}
/* end https://reticulum.miraheze.org/ */
</style><div id="Reticulum_concepts" style="font-size:114%;margin:0 4em"><a href="Reticulum_Protocol" title="Reticulum Protocol">Reticulum</a> concepts</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Announce" title="Announce">Announce</a></li>
<li><a href="Blackhole" title="Blackhole">Blackhole</a></li>
<li><a href="Buffer" title="Buffer">Buffer</a></li>
<li><a href="Channel" title="Channel">Channel</a></li>
<li><a href="Destination" title="Destination">Destination</a></li>
<li><a href="Discovery" title="Discovery">Discovery</a></li>
<li><a href="Identity" title="Identity">Identity</a></li>
<li><a href="Instance" title="Instance">Instance</a></li>
<li><a href="Interface" title="Interface">Interface</a></li>
<li><a href="Interface_Access_Code" title="Interface Access Code">Interface Access Code</a> (IFAC)</li>
<li><a href="Link" title="Link">Link</a></li>
<li><a href="Network_identity" title="Network identity">Network identity</a></li>
<li><a href="Node" title="Node">Node</a></li>
<li><a href="Packet" title="Packet">Packet</a></li>
<li><a class="mw-selflink selflink">Path</a></li>
<li><a href="Propagation_node" title="Propagation node">Propagation node</a></li>
<li><a href="Resource" title="Resource">Resource</a></li>
<li><a href="Stamp" title="Stamp">Stamp</a></li>
<li><a href="Transport_node" title="Transport node">Transport node</a></li></ul>
</div></td></tr></tbody></table></div></div><div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks">Category: <ul><li><a href="Category%3AConcepts" title="Category:Concepts">Concepts</a></li></ul></div></div><!--htdig_noindex--><div><div class="zim-footer">
This page is issued from <a class="external text" title="Last edited on 2026-08-22" href="https://reticulum.miraheze.org/wiki/?title=Path&oldid=3291">Reticulum Community Wiki</a>. The text is available under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</div>
</body></html>